home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / OpenProlog1d / Open Prolog Info < prev    next >
Text File  |  1991-02-01  |  20KB  |  476 lines

  1. ◊ Hi. Welcome to 'Open Prolog'.
  2. This information refers to version 1.0d17.
  3. Please read it carefully, especially the section on workarounds at the end.
  4. This is a development version of the software, so it has bugs!
  5. Save your work often.
  6.  
  7. Changes from previous versions are listed at the end of the file.
  8.  
  9. ◊ Introduction
  10.  
  11. Open Prolog is an implementation of Edinburgh Prolog.
  12.  
  13. For information on Prolog itself, refer to one of the standard textbooks,
  14. for instance 'Programming in Prolog' by Clocksin & Mellish,
  15. 'Introduction to Logic Programming' by Christopher Hogger, or the
  16. excellent 'Artificial Intelligence through Prolog' by Neil C. Rowe.
  17. (Titles are approximate.)
  18.  
  19. Open Prolog supports most of the features of DEC Prolog or C-Prolog,
  20. including Definite Clause Grammars. Real-number arithmetic isn't supported.
  21. The 'logical' assert and retract semantics of Lindholm & O'Keefe are
  22. implemented.
  23. Last Call Optimisation (often called Tail Recursion Optimisation) is done,
  24. and indexing on the first argument of clause heads is performed,
  25. mainly to detect determinacy so as to improve memory utilisation.
  26.  
  27. Open Prolog is called 'Open' because 'external' predicates can be dropped into
  28. it via a Hypercard-like External Predicate Interface.
  29.  
  30. Open Prolog is not copy protected. 
  31.  
  32. ◊ System & Memory Requirements
  33. Open Prolog runs in machines having System 6 (or later) system software.
  34. If you try to run using an older system, it will complain.
  35. This means that it won't run in anything 'less' than a Mac Plus.
  36. Open Prolog seems to run in System 7 Beta Software (at this time).
  37.  
  38. Open Prolog will run under Multifinder in a memory allocation of
  39. 512K bytes or a bit less. 1024K bytes is recommended.
  40. For most programs, more than 1024K won't improve performance much.
  41.  
  42. Open Prolog will run very comfortably on a 1MB machine with
  43. Multifinder off.
  44.  
  45. Memory allocation and garbage collection are automatic.
  46. However, space is not currently recovered when clauses are retracted, nor
  47. when atoms or functors are no longer used.
  48.  
  49. For your information, the development environment is a Mac II with 5MB Ram.
  50. Testing is also done on a Mac Plus with 4MB Ram. Systems are 6.0.3.
  51.  
  52. ◊ Speed
  53. Open Prolog runs the naive reverse benchmark at about 1900 Lips
  54. on a Macintosh Plus. That means that it's about as fast - maybe even
  55. a little faster - on a Mac Plus than C-Prolog on a Vax 11/780.
  56.  
  57. ◊ About Open Prolog…
  58. The 'About Open Prolog…' box contains a stacks indicator which
  59. shows memory space broken into
  60. Name (atom & functor), Index, Code, Global, Local & Trail spaces.
  61. It's possible to watch the stacks grow and contract as the program runs,
  62. but keeping the stacks indicator up-to-date slows execution quite a bit!
  63. To avoid the speed penalty, it's possible to open and close the box while
  64. the interpreter is running.
  65. Alternatively, hiding the stacks indicator fully is just as effective.
  66.  
  67. ◊ Using Open Prolog
  68. Open Prolog is a text-oriented Prolog. If you're looking for
  69. pretty pictures, try MacPaint, or write yourself a set of
  70. external predicates. Seriously, if you have used DEC Prolog or C-Prolog,
  71. then the style of use of Open Prolog is quite similar.
  72. The Worksheet is the rough equivalent of their log file.
  73. It's better because you can re-use chunks of it.
  74. Standard input and output use the Worksheet by default.
  75.  
  76. ◊ Startup
  77. You can start Open Prolog either by opening some of its documents
  78. or by opening the application itself.
  79.  
  80. ◊ Home Folder
  81. The folder that the Worksheet is in is called the Home Folder.
  82. The Home Folder is chosen automatically as follows:
  83. If you start Open Prolog by opening some of its documents from the
  84. desktop, then the folder the documents are in becomes the
  85. Home Folder.
  86. If you start Open Prolog by opening it directly, then the folder it's in
  87. becomes the Home Folder.
  88. You can make any folder the Home Folder by saving the Worksheet
  89. into it. See the section on file naming for the significance of the
  90. Home Folder.
  91.  
  92. ◊ Startup Actions
  93. Before opening any files that you may have selected on the desktop,
  94. Open Prolog will open a Worksheet in the home folder, always called
  95. 'Open Prolog Worksheet'.
  96. Open Prolog does a few other things at startup:
  97. It looks in the folder containing Open Prolog itself for a file called
  98. 'Open Prolog Options' and if it exists, it is consulted.
  99. It looks in the home folder for a file called 'Open Prolog Startup' and if
  100. it exists, it is consulted.
  101. These files can be used to do routine things at startup, if desired.
  102. Open Prolog Options should contain generally useful stuff, whereas
  103. Open Prolog Startup, being specific to a folder, can contain more specialised
  104. startup stuff.
  105. For example, in the distribution of Open Prolog, a clause in
  106. the Open Prolog Startup file checks for the existence of this file -
  107. Open Prolog Info - and displays a message in a box.
  108. There is a useful predicate defined in Open Prolog Options called
  109. 'Syntax Error'. When an error occurs reading from a file,
  110. an error message is generated. The part that begins:
  111. :- 'Syntax Error'(… 
  112. can be used to call the 'Syntax Error' predicate defined
  113. in Open Prolog Options, which will try to open the file and show where
  114. the error was. Try it by first consulting the file 'buggy syntax' below:
  115.  
  116. ['buggy syntax'].
  117.  
  118. yes
  119.  
  120. Once the startup phase is finished, you are free to edit these files in the
  121. normal way - there's nothing special about them.
  122.  
  123. ◊ Usage
  124. It helps to visualise the system as having two distinct parts -
  125. the text editor and the Prolog interpreter.
  126.  
  127. ◊ Text Editor
  128. Your interaction with Open Prolog is via the text editor. With it, you can do
  129. text-editing things on the Worksheet, and on up to seven other files.
  130. Facilities offered are standard. Worth mentioning is 'Auto-indent'
  131. which, if enabled, works by copying all the spaces & tabs from the start
  132. of the previous line down to the start of this line. Also worth mentioning is
  133. the 'Search All Windows' in the Find and Replace menus. All windows will
  134. be searched, in front-to-back order until a match is found. The window in
  135. which the match is found becomes the front window.
  136. An open diamond - ◊ - appears opposite the name of the current front window
  137. in the Window menu. Underlining indicates that the window needs to be
  138. saved (either it's been changed, or it was never saved before).
  139. The 'Display Selection' menu will scroll the caret or the selected text into
  140. view.
  141.  
  142. ◊ Window Characteristics
  143. When windows are opened, they are opened in the same location (assuming
  144. it's still visible), and with the same size as when they were
  145. last closed.
  146. Likewise, font, font size and the position of the flashing caret or selection
  147. point are reset to they were when the window was last closed.
  148. A window's maximum size if fixed according to the size of the
  149. printable page in the currently selected printer.
  150.  
  151. ◊ Locked Files
  152. If a file is locked, or its volume is locked, then a small padlock icon
  153. appears in the bottom left of its window. You can use the window
  154. as normal, but you won't be allowed to save changes to that file.
  155.  
  156. ◊ Worksheet
  157. Most of the transactions that occur between you and Open Prolog will be
  158. through a window. Generally, you issue commands by typing them into a
  159. window and then notifying the interpreter about them, and Open Prolog sends
  160. replies into the same window.
  161. You can use any window for this, but the Worksheet will be chosen by default
  162. or if any errors occur in using another window.
  163. The Worksheet can't be closed.
  164.  
  165. ◊ The 'Enter' Key
  166. To communicate with the Prolog interpreter, you need to notify it in some
  167. way that what you're doing is not just text editing. This is the function of
  168. the 'Enter' key: all input from the text editor to the interpreter
  169. is denoted by selecting the text and typing the <ENTER> key.
  170. (This is similar to the arrangement in Apple's excellent MPW).
  171.  
  172. For example, below is the text of a command to consult the file 'benchmarks'.
  173. To input it to the interpreter,  select it (include the full stop) and
  174. type <ENTER>:
  175.  
  176. [benchmarks].
  177.  
  178. Actually, you don't always have to select the whole thing; if the text
  179. occupies only one line, position the cursor anywhere along it and type <ENTER>.
  180. The whole line will then be taken as the text. This is called
  181. 'single line selection'.
  182.  
  183. Remember also that you use the <ENTER> key to denote any input to the
  184. interpreter, not just command input.
  185.  
  186. Try evaluating the following query by single-line-selecting it.
  187. You'll need to provide a further input in response; again, you
  188. can use single line selection. Also, remember the full stop after
  189. the term:
  190.  
  191. write('Please enter a Prolog term: '),read(Term),write('It''s: '),write(Term).
  192.  
  193. As is normal on DEC Prolog, where variable bindings are given as part
  194. of the result of a query, the system waits for confirmation - type the
  195. <ENTER> key - or a request for a retry - type a semicolon and  the <ENTER> key.
  196.  
  197. ◊ Prompts
  198. The ?- prompt, familiar to many Prolog users, is no longer necessary, and
  199. its inclusion would cause many implementation headaches.
  200. In fact, all prompts, being inherently line-oriented, are gone from the
  201. screen. Instead, we hope to put a 'status bar' in the bottom of the Worksheet
  202. window in the future.
  203. If you wish, you can enter a query preceded by a ?-  - it won't make any
  204. difference. If you precede your query by a :- then it will be performed without returning the variable bindings.
  205.  
  206. Examples:
  207. ?- write(H).
  208. :- write(H),nl.
  209.  
  210.  
  211. ◊ Comment on <ENTER> & Prompts
  212. Using the <ENTER> key to denote input to the interpreter has many advantages,
  213. although it's probably a bit annoying to get used to. Likewise, the lack of
  214. a prompt may be a bit disorienting.
  215. The principal advantage of these changes is that you can do standard
  216. text-editing freely and you can use any part of the Worksheet as
  217. a source of input. In other words, you can re-use text on the Worksheet
  218. over and over.
  219.  
  220. ◊ During Evaluation
  221. When Open Prolog is doing a long evaluation, it's still possible to use the
  222. text editor in windows other than the Worksheet. The system will share
  223. the processor between the interpreter and the text editor.
  224. Generally, you won't notice the sharing being done.
  225. Occasionally, however, depending on the evaluation being done,
  226. the interpreter will keep the processor for a few
  227. seconds to do garbage collection, or I/O. During that time the text editor
  228. will 'freeze' and won't respond to the keyboard or other user input. This
  229. is normal and is no cause for concern.
  230.  
  231. Please be careful to save your work frequently in this mode,
  232. because if the evaluation causes Open Prolog to crash, 
  233. your work may be lost. 
  234.  
  235. ◊ Stopping an Evaluation
  236. The standard 'Command-.' will halt a Prolog evaluation (eventually!).
  237.  
  238. ◊ Background Operation
  239. Open Prolog is Multifinder 'friendly' and will run in the Multifinder 
  240. background. This may be useful for long evaluations. Running under System 7,
  241. it can be hidden and still be running.
  242.  
  243. ◊ Built-In Predicates
  244. To get a list of all predicates - normal, built-in and external,
  245. there follows a sequence of commands to perform.
  246. Select them all and hit the <ENTER> key:
  247.  
  248. 'system$predicate'(X,Y,Z),functor(Y,X,A),
  249. writeq(X),write('/'),write(A),write(.),write('   % '),write(Z),nl,fail.
  250.  
  251. Note: with a few exceptions, you should stay away from
  252. anything with a $ in it, or anything with the word 'system' in it - you
  253. may end up crashing the program.
  254.  
  255. The file 'Open Prolog Extras' has more information about
  256. the non-standard predicates.
  257.  
  258. ◊ Redefining Built-In Predicates
  259. Open Prolog misbehaves if you try to redefine any built-ins or externals.
  260.  
  261. ◊ Arithmetic
  262. Arithmetic is standard 32-bit integer arithmetic. The following
  263. predefined functions are provided:
  264. unary minus: - 
  265. subtraction: - 
  266. addition: +
  267. multiplication: *
  268. integer division: /
  269. mod (remainder): mod
  270. bitwise and: /\
  271. bitwise or: \/
  272. bitwise not: ~
  273. bitwise leftshift: <<
  274. bitwise rightshift: >>
  275. maximum integer:  maxint
  276. minimum integer: minint
  277. time:  cputime
  278. The function 'cputime' gives the time in milliseconds since system startup
  279. with a short-term granularity of approximately 16 mS (one system 'tick').
  280. Use the built-in procedure 'system$seconds'(Seconds) for more
  281. accurate timing of long intervals.
  282.  
  283. ◊ Operators
  284. The standard DEC Prolog operator definitions are made at startup.
  285. You can get a list of operator definitions by evaluating the following query.
  286.  
  287. current_op(X,Y,Z),write(op(X,Y,Z)),write('.'),nl,fail.
  288.  
  289. ◊ Extended Character Set
  290. The full laser-printer character set (e.g. Times), which has more
  291. characters than the original standard character sets like Chicago,
  292. is assumed here.
  293.  
  294. Accented characters are treated as alphabetic, so atoms containing
  295. accented characters don't need to be put in quotes.
  296.  
  297. Thus the following is legal:
  298.  
  299. Xävier = nóirín+jürgen+École+grève+daõ+çedilla+forêt.
  300.  
  301. ◊ Sorting
  302. Sorting is performed by the Mac's International Utilities, which
  303. should handle accented characters correctly.
  304. Note that case is ignored when sorting functor or atom names.
  305.  
  306. ◊ Files
  307. The file-handling arrangements are essentially unchanged from DEC Prolog,
  308. except where obviously necessary. Some built-in predicates have been
  309. omitted, notably 'close/1' and 'fileErrors' & 'nofileerrors'.
  310.  
  311. ◊ File Naming
  312. File naming follows standard Mac practice. To specify a file in the
  313. home folder, just give its name (as 'benchmarks' above).
  314.  
  315. If it's in another folder, you can give its full pathname. For example, to 
  316. consult a file called 'Utilities' on a disk or volume called 'Open Prolog Disk'
  317. in a folder called 'Samples' you could use:
  318.  
  319. ['Open Prolog Disk:Samples:Utilities'].
  320.  
  321. Alternatively, you can specify a file by its partial pathname (i.e. the extra information needed to 'get from' the Home Folder to there).
  322. For instance, on this release disk you can use the following to consult
  323. the file 'Tak' in the folder 'Samples' which is in the Home Folder:
  324.  
  325. [':Samples:Tak'].
  326.  
  327. ◊ End of File & End of Line
  328. -    End of line & end of file treatment is the same as in DEC Prolog.
  329. -    When reading from a file, the last term is always 'end_of_file'.
  330. -    When get-ing or get0-ing from a file, the last character is code 26.
  331. .    Carriage Returns (ASCII code 13), generally signifying end-of-line in a file,
  332. are filtered out of the get or get0 stream and replaced by code 31.
  333.  
  334. Input from a window never results in an end of file condition.
  335.  
  336. ◊ nl
  337. -    nl outputs a Carriage Return (ASCII code 13).
  338.  
  339. ◊ get & get0
  340. -    get & get0 always return the next character, irrespective of whether it is
  341. 'printable' or not.
  342.  
  343. ◊ Debugging
  344. The main Program Debugging facility is the trace/1 predicate.
  345. You can trace the execution of a predicate by calling it via trace:
  346.  
  347. %assuming you've already consulted 'tak' above…
  348.  
  349. trace(tak(12,8,4,N)).
  350.  
  351. The commands available are:
  352. <ENTER> - trace
  353. s<ENTER> - step over
  354. a<ENTER> - abort
  355. f<ENTER> - fail
  356. @<ENTER> - break for one command
  357.  
  358. It's not possible to spy.
  359.  
  360. The unknown/2 predicate specifies what happens when a call is made
  361. to an unknown predicate. (Allowable values are fail or trace.)
  362.  
  363. E.g., select:
  364.  
  365. unknown(X,trace).
  366.  
  367. This will set Open Prolog to abort when an unknown call is made.
  368.  
  369. Try it now by selecting:
  370.  
  371. huh(What).
  372.  
  373. A snazzy source-level debugger, a là SADE, is under development.
  374.  
  375. ◊ System Error Messages:
  376. There are three kinds of error messages:
  377. A. A simple information box with 'OK' as the only option.
  378. B. A 'Diagnostic' or 'Breakpointer' information box.
  379. This is intended for giving debugging
  380. information, and if it turns up in normal operation it means that a special
  381. condition has occured. 
  382. C. Whenever Open Prolog detects a system error, it will warn you about it.
  383. You are generally given some information about the source and kind of the
  384. error. Naturally, it isn't always possible to predict what will happen
  385. if you continue operating the system.
  386.  
  387. Summarising: When you get an error message,
  388. if you are given a choice, it's best (initially) to exit.
  389. You normally get to save your files and windows, although sometimes
  390. the nature of the error causes more errors to be made as the files &
  391. windows are being saved. It that happens, you lose your fi…
  392. Experience will tell what's best to do in a situation.
  393. (I sure hope you don't get a lot of that experience…)
  394.  
  395. I'd appreciate you mailing me with the circumstances and nature of
  396. B & C type messages, and of undesirable effects of A type messages.
  397.  
  398. ◊ Problems with Open Prolog
  399. Here are the known significant difficulties with Open Prolog at the moment.
  400. There are simple workarounds for them all.
  401.  
  402. 1. The absolute maximum size of any file that can be seen in an Open Prolog
  403. window is limited to 32767 characters.
  404. Actually the realistic maximum is about 16000.
  405. This limit only applies to files that you want to open as windows.
  406. Open Prolog neither truncates window files nor warns you about impending
  407. problems.
  408. So, for example, if your program produces large output files, that's OK as
  409. long as you don't want to open them as windows from Open Prolog.
  410. Workarounds:
  411.  Break your files into smaller files.
  412.  Trim the Worksheet periodically so that is doesn't get too big.
  413.  To view and process larger text files, you'll need to use a text processor
  414. (MPW highly recommended) or word processor in text mode (MS Word or
  415. MacWrite II).
  416.  
  417. 2. Currently, the window system and the file system are not integrated.
  418. So, changes you make to a file in a window are not automatically
  419. reflected in the file when it is being consulted.
  420. Workaround - after making changes to a file in a window,
  421. save it before consulting or reconsulting it.
  422. (Actually, it's a good idea to save your work each time anyway…)
  423. Likewise, a window must be closed before your program
  424. starts to output to it.
  425. Another difficulty is if you try to open a window & file from a predicate
  426. and the file is already open into a window of a different name; then the
  427. system will not recognise the already open window as the one it wants,
  428. and will refuse to open another.
  429.  
  430. 3. Tab characters are not properly represented or printed - instead a tab
  431. always occupies exactly one space. If you intend using your files with
  432. another text/word processor, then you should put them in…
  433.  
  434. 4. The implementation of cuts in a disjunctive call (i.e. ;/2) is not
  435. according to the standard.
  436. According to the standard, cut in a disjunction should have the same effect
  437. as a cut in the disjunction's parent. In Open Prolog, a cut in a disjunction has
  438. only a local effect.
  439. Secondly, disjunctive calls are compiled on the fly in Open Prolog, so they
  440. much slower than normal code.
  441. Both these points will be fixed on the next revision.
  442.  
  443. 5.    Similarly to above, a nested conjunctive call has the same problems -
  444. cuts have only local effects, and the nested calls are compiled on the fly.
  445.  
  446. ◊ External Predicates
  447. If you really want to write some external predicates, mail me & I'll send you
  448. the MPW Pascal files you need together with an example.
  449. Be aware that it's likely that the interface will change in the future.
  450.  
  451. ◊ Revision History
  452. -1.0d17
  453. 1. Cosmetic improvements, particularly multi-screen handling.
  454. 2. New window-handling predicates.
  455. 3. External Predicate Interface Inprovement
  456.  
  457. - 1.0d16
  458. 1.    A crash-without-warning bug has been cured.
  459. 2.    A bug in call(X) which declated a call like call((read(X),X)) illegal because
  460. the second call was uninstantiated has been cured.
  461. 3.    The DCG compiler has been changed a little.
  462. 4.    Various cosmetic improvements.
  463. 5.    A number of extra predicates to handle window I/O have been added.
  464.  
  465. - 1.0d15
  466. 1. A restriction which required all <ENTER>ed text (including commands)
  467. to be on the Worksheet has been removed.
  468. 2. Sometimes the way in which part of a line was picked for selection
  469. was a little unpredictable. This has been cured.
  470. 3. A -192 warning caused by a harmless fault in the System
  471. when DA Menuz and Suitcase were present has been removed.
  472.  
  473. - 1.0d14
  474. Initial Release
  475.  
  476.